package com.fxkj.cloud.drms.domain.device.repository;

import com.fxkj.cloud.dbs.common.constants.DeviceStatusEnum;
import com.fxkj.cloud.dbs.common.model.DeviceAttributeKey;
import com.fxkj.cloud.dbs.common.model.DeviceBasicInfo;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;


/**
 * <p>description: </p>
 * @author ww
 * @date 2025/3/19 16:07
 */
public interface DeviceRepository {
    /**
     * 通过编码获取对应的设备基础信息
     * @param code
     * @return
     */
    DeviceBasicInfo getDeviceBasicInfoByDeviceSerialNo(String code);

    /**
     * 通过设备id获取设备基础信息
     * @param deviceId
     * @return
     */
    DeviceBasicInfo getDeviceBasicInfoByDeviceId(UUID deviceId);

    /**
     * 通过设备id获取设备基础信息
     * @param deviceIds
     * @return
     */
    Map<UUID, DeviceBasicInfo> getDeviceBasicInfoByDeviceIds(Set<UUID> deviceIds);

    /**
     * 设备状态变更
     * @param deviceSerialNo
     * @param status
     */
    void deviceStatusChange(String deviceSerialNo, DeviceStatusEnum status);

    /**
     * 获取设备的属性
     * @param deviceId
     * @return
     */
    List<DeviceAttributeKey> getDeviceAttributeKeys(UUID deviceId, Set<String> attributeKeys);

    /**
     * 设备控制计划下发回应
     * @param requestId
     * @param deviceSerialNo
     */
    void deviceControlPlanCallback(UUID requestId, String deviceSerialNo);

    /**
     * 获取设备指定属性key
     * @param deviceId
     * @param sn
     * @param attributeIds
     * @return
     */
    List<DeviceAttributeKey> getDeviceAttributeKeys(UUID deviceId, Integer sn, Set<UUID> attributeIds);

    /**
     * 获取所有设备的基础信息
     */
    List<DeviceBasicInfo> getAllDeviceBasicInfo(Set<UUID> productIds);
}
